package bm97;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/9/13 0:33
 * BM97 旋转数组
 * https://www.nowcoder.com/practice/e19927a8fd5d477794dac67096862042?tpId=295&tqId=1024689&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
 */
public class Solution {

    public int[] solve (int n, int m, int[] arr) {
        m = m % n; // 保证 m 小于 n
        // 翻转模拟
        reverse(arr, 0, arr.length - 1); // 整体翻转
        reverse(arr, 0, m - 1); // 翻转前 m 个
        reverse(arr, m, arr.length - 1); // 翻转其余的
        // 返回结果
        return arr;
    }

    // 翻转指定区间的数组
    private void reverse(int[] arr, int start, int end) {
        while (start < end) {
            swap(arr, start, end);
            start++;
            end--;
        }
    }

    // 交换值
    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}
